package org.safaproject.server.dao;

import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.List;

import org.hibernate.SessionFactory;
import org.safaproject.server.model.Usuario;
import org.safaproject.server.util.MD5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

@Transactional(rollbackFor=Exception.class)
public class UsuarioDAO extends HibernateDaoSupport {

	@Autowired
	public void initSessionFactory(SessionFactory factory) {
	    setSessionFactory(factory);
	}
	
	public Usuario getUsuarioById(Long idUsuario){
		return (Usuario) super.getHibernateTemplate().load(Usuario.class, idUsuario);
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> getAllUsuarios(){
		return super.getHibernateTemplate().find("from Usuario");
	}
	
	public Long saveUsuario(Usuario usuario){
		hashearPassword(usuario);
		super.getHibernateTemplate().save(usuario);
		return usuario.getIdUsuario();
	}

	public Long updateUsuario(Usuario usuario){
		hashearPassword(usuario);
		super.getHibernateTemplate().update(usuario);
		return usuario.getIdUsuario();
	}
	
	private void hashearPassword(Usuario usuario) {
		try {
			usuario.setPassword(MD5.getStringHash(usuario.getPassword()));
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			// TODO VER TEMA EXCEPCIONES
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}
